package vip.sweet.sys.modular.oshi.entity;

import cn.hutool.core.util.NumberUtil;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;

/**
 * @author ASUS
 * @Date 2025/3/28 22:33
 * @Descripition
 */
@Data
@Schema(description = "CPU相关信息")
@Builder
public class Cpu implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 核心数
     */
    @Schema(description = "核心数")
    private int cpuNum;

    /**
     * CPU总的使用率
     */
    @Schema(description = "CPU总的使用率")
    private double total;

    /**
     * CPU系统使用率
     */
    @Schema(description = "CPU系统使用率")
    private double sys;

    /**
     * CPU用户使用率
     */
    @Schema(description = "CPU用户使用率")
    private double used;

    /**
     * CPU当前等待率
     */
    @Schema(description = "CPU当前等待率")
    private double waits;

    /**
     * CPU当前空闲率
     */
    @Schema(description = "CPU当前空闲率")
    private double free;


    public double getTotal() {
        return NumberUtil.round(NumberUtil.mul(total, 100), 2).doubleValue();
    }

    public double getSys() {
        return NumberUtil.round(NumberUtil.mul(sys / total, 100), 2).doubleValue();
    }

    public double getUsed() {
        return NumberUtil.round(NumberUtil.mul(used / total, 100), 2).doubleValue();
    }

    public double getWait() {
        return NumberUtil.round(NumberUtil.mul(waits / total, 100), 2).doubleValue();
    }

    public double getFree() {
        return NumberUtil.round(NumberUtil.mul(free / total, 100), 2).doubleValue();
    }
}
